package com.study.utils;

import cn.hutool.core.map.FixedLinkedHashMap;
import cn.hutool.core.thread.ThreadUtil;
import com.google.common.collect.EvictingQueue;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;

import java.util.UUID;

/**
 * 固定队列
 */
public class QueueDemo {

    private static final int LIST_SIZE = 10;

    @Test
    public void hutool() {

        // 初始化时指定大小
        FixedLinkedHashMap<String, Integer> fixedLinkedHashMap = new FixedLinkedHashMap<>(LIST_SIZE);

        for (int i = 0; i < LIST_SIZE * 2; i++) {
            // 其余写入和读取操作同LinkedHashMap类似
            // 对于key，可以按照自己的业务需求填写
            fixedLinkedHashMap.put(UUID.randomUUID().toString(), 1);

        }
        // 读取操作
        // 获取元素个数
        long size = fixedLinkedHashMap.values().size();
        System.out.println("size" + size);
        // 统计其中的总和
        int sum = fixedLinkedHashMap.values().stream().mapToInt(value -> value).sum();
        System.out.println(sum);
    }

    /**
     * 测试驱逐队列｜滑动窗口
     */
    @Test
    public void testEvictingQueue() {
        EvictingQueue<Integer> queue = EvictingQueue.create(6);
        for (int i = 1; i < 10; i++) {
            ThreadUtil.safeSleep(100);
            queue.add(i);
            System.out.println(String.format("当前队列大小：%d，队列中元素：%s", queue.size(), StringUtils.join(queue.iterator(), ',')));
        }
    }

}
